//
//  MineAPI.swift
//  LeGou
//
//  Created by lxm on 2022/7/23.
//
import Foundation

enum MineAPI {
    /// 用户信息
    case userInfo(_ param : [String : Any])
    
    case inviteCode(_ param : [String : Any])
    // 地址列表
    case addressList(_ param : [String : Any])
    // 保存地址
    case saveAddress(_ param : [String : Any])
    // 删除地址
    case deleteAddress(_ param : [String : Any])
    // 设置为默认地址
    case setDefaultAddress(_ param : [String : Any])
    // 获取默认地址
    case getDefaultAddress
    // 修改头像、昵称
    case editInfo(_ param : [String : Any])
    // 我的推荐人
    case myRecommender
    // 我的收益
    case myProfit
    // 我的收益详情
    case myProfitData(_ param : [String : Any])
    // 活跃度
    case activityData
    // 用户服务商数据
    case serviceProviderInfo
    // 用户团队信息
    case teamInfo(_ param : [String : Any])
    // 微信号设置
    case setWx(_ param : [String : Any])
    // 团队信息
    case teamInviteInfo(_ param : [String : Any])
    // 收益列表
    case profitList(_ param : [String : Any])
    // 找回交易密码
    case findTradePwd(_ param : [String : Any])
    // 修改交易密码
    case changeTradePwd(_ param : [String : Any])
    // 绑定
    case wxBind(_ param : [String : Any])
    // 钱包
    case walletInfo(_ param : [String : Any])
    // 提现申请
    case withdrawApply(_ param : [String : Any])
    // 账单明细
    case billDetails(_ param : [String : Any])
    // 修改手机号
    case modifyPhone(_ param : [String : Any])
    // 解绑微信
    case wxUnbind(_ param : [String : Any])
    // 粉丝订单
    case fansOrders(_ param : [String : Any])
    // 实名认证
    case realName(_ param : [String : Any])
    // 银行卡校验
    case bankVerify(_ param : [String : Any])
    // 绑定银行卡
    case bindBankCard(_ param : [String : Any])
    // 解绑银行卡
    case unbindBank(_ param : [String : Any])
    // 三方订单
    case thirdOrder(_ param : [String : Any])
    // 公排信息
    case publicPlatoonInfo
    // 推广额度（已发放）列表
    case listQuotaGive(_ param : [String : Any])
    // 推广额度（待发放）列表
    case listQuotaSurplus(_ param : [String : Any])
    // 出局额度明细记录
    case quotaBill(_ param : [String : Any])
    // 邀请海报
    case invitePoster
    // 获取手续费比例
    case transferRatio(_ param : [String : Any])
    // 根据手机号搜索用户
    case searchUser(_ param : [String : Any])
    /// 创建将军令
    case create_auth_code(_ param: [String: Any])
    // 转账
    case transfer(_ param : [String : Any])
    // 转账历史记录
    case transferHistory(_ param : [String : Any])
    // 转账记录'
    case transferRecord(_ param : [String : Any])
    // 用户双余额
    case userBanlance
    // 活跃度明细
    case activityRecord(_ param : [String : Any])
    // 获取支付宝登录参数
    case getAliLoginParam
    // 绑定支付宝信息
    case bindAliInfo(_ param : [String : Any])
    // 解绑微信
    case aliUnbind(_ param : [String : Any])
    // 获取账户原有信息
    case getOldAccount(_ param : [String : Any])
}

extension MineAPI: ZMApiProvider {
    func BaseUrl() -> String {
        return baseUrl
    }
 
    func urlAndMthodAndParam() -> (url: String, method: ZMHTTPMethod, params: [String : Any], body: Bool) {
        switch self {
            case .userInfo(let pa):
                return ("/api/front/user", .get, pa, false)
            case .inviteCode(let pa):
                return ("/api/front/user/bindSpread", .post, pa, true)
            case .addressList(let pa):
                return ("/api/front/address/list", .get, pa, false)
            case .saveAddress(let pa):
                return ("/api/front/address/edit", .post, pa, true)
            case .deleteAddress(let pa):
                return ("/api/front/address/del", .post, pa, true)
            case .setDefaultAddress(let pa):
                return ("/api/front/address/default/set", .post, pa, true)
            case .getDefaultAddress:
                return ("/api/front/address/default", .get, [:], false)
            case .editInfo(let pa):
                return ("/api/front/user/edit", .post, pa, true)
            case .myRecommender:
                return ("/api/front/user/myInviter", .get, [:], false)
            case .myProfit:
                return ("/api/front/user/incomeInfo", .get, [:], false)
            case .myProfitData(let pa):
                return ("/api/front/user/incomeData", .get, pa, false)
            case .activityData:
                return ("/api/front/user/activityData", .get, [:], false)
            case .serviceProviderInfo:
                return ("/api/front/user/providerLevelData", .get, [:], false)
            case .teamInfo(let pa):
                return ("/api/front/user/teamInfo", .get, pa, false)
            case .setWx(let pa):
                return ("/api/front/user/updateWechatNo", .put, pa, true)
            case .teamInviteInfo(let pa):
                return ("/api/front/user/teamInvited", .get, pa, false)
            case .profitList(let pa):
                return ("/api/front/user/income/listOrder", .get, pa, false)
            case .findTradePwd(let pa):
                return ("/api/front/user/tradePwd/mobile/reset", .post, pa, true)
            case .changeTradePwd(let pa):
                return ("/api/front/user/tradePwd/reset", .post, pa, true)
            case .wxBind(let pa):
                return ("/api/front/user/updateBindWxOpenId", .put, pa, true)
            case .walletInfo(let pa):
                return ("/api/front/user/extractInfo", .get, pa, false)
            case .withdrawApply(let pa):
                return ("/api/front/user/extractCash", .post, pa, true)
            case .billDetails(let pa):
                return ("/api/front/user/bill/list", .get, pa, false)
            case .modifyPhone(let pa):
                return ("/api/front/user/update/binding", .post, pa, true)
            case .wxUnbind(let pa):
                return ("/api/front/user/delWxOpenId", .put, pa, true)
            case .fansOrders(let pa):
                return ("/api/front/user/income/listMallOrder", .get, pa, false)
            case .realName(let pa):
                return ("/api/front/amateur/user/realName", .post, pa, true)
            case .bankVerify(let pa):
                return ("/api/front/amateur/verifyCard", .post, pa, true)
            case .bindBankCard(let pa):
                return ("/api/front/user/bindCard", .put, pa, true)
            case .unbindBank(let pa):
                return ("/api/front/user/delCard", .put, pa, true)
            case .thirdOrder(let pa):
                return ("/api/front/user/sf/listOrder", .get, pa, false)
            case .publicPlatoonInfo:
                return ("/api/front/user/publicPlatoonInfo", .get, [:], false)
            case .listQuotaGive(let pa):
                return ("/api/front/user/quota/listQuotaGive", .get, pa, false)
            case .listQuotaSurplus(let pa):
                return ("/api/front/user/quota/listQuotaSurplus", .get, pa, false)
            case .quotaBill(let pa):
                return ("/api/front/user/quotaBill/list", .get, pa, false)
            case .invitePoster:
                return ("/api/front/banner/listPoster", .get, [:], false)
            case .transferRatio(let pa):
                return ("/api/front/flowing/getTransactionRatio", .get, pa, false)
            case .searchUser(let pa):
                return ("/api/front/flowing/getUserInfo", .get, pa, false)
            case .create_auth_code(let pa):
                return ("/api/front/amateur/createAuthCode", .get, pa, false)
            case .transfer(let pa):
                return ("/api/front/flowing/transaction", .post, pa, true)
            case .transferHistory(let pa):
                return ("/api/front/flowing/listHistory", .get, pa, false)
            case .transferRecord(let pa):
                return ("/api/front/flowing/listTransferRecord", .get, pa, false)
            case .userBanlance:
                return ("/api/front/pay/userWalletInfo", .get, [:], false)
            case .activityRecord(let pa):
                return ("/api/front/user/activity/listRecord", .get, pa, false)
            case .getAliLoginParam:
                return ("/api/front/user/alilogin/params", .get, [:], false)
            case .bindAliInfo(let pa):
                return ("/api/front/user/alilogin/bind", .post, pa, false)
            case .aliUnbind(let pa):
                return ("/api/front/user/alilogin/unbind", .post, pa, true)
            case .getOldAccount(let pa):
                return ("/api/front/old/user", .get, pa, false)
        }
    }
    
    func HTTPHeader() -> ZMHTTPHeaders? {
        return AppHelper.reqeustHeader()
    }
    
    func UpLoadData() -> [Data]? {
        return nil
    }
}
